Visualisering av vinstanalys med Pandas (Lärare Didi Ahmedou)¶

kontakt: didi.ahmedou@taby.se

Butiksförsäljning och vinstanalys: Datasats¶

Analys av butiksförsäljning och vinst är uppgiften att analysera prestationen för en detaljhandelsbutik i form av försäljning och vinst. Det hjälper företag att identifiera områden för förbättring och fatta datadrivna beslut för att optimera sin verksamhet, prissättning, marknadsföring och lagerhanteringsstrategier för att driva intäkter och tillväxt. I denna lektion kommer vi att ta oss igenom en analys av butiksförsäljning och vinst med hjälp av Python.

In [ ]:
 
In [1]:
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import plotly.io as pio
import plotly.colors as colors
pio.templates.default = "plotly_white"

data = pd.read_csv("Sample_Superstore.csv", encoding='latin-1') 
In [4]:
data.head(2)
Out[4]:
Row ID Order ID Order Date Ship Date Ship Mode Customer ID Customer Name Segment Country City ... Postal Code Region Product ID Category Sub-Category Product Name Sales Quantity Discount Profit
0 1 CA-2016-152156 11/8/2016 11/11/2016 Second Class CG-12520 Claire Gute Consumer United States Henderson ... 42420 South FUR-BO-10001798 Furniture Bookcases Bush Somerset Collection Bookcase 261.96 2 0.0 41.9136
1 2 CA-2016-152156 11/8/2016 11/11/2016 Second Class CG-12520 Claire Gute Consumer United States Henderson ... 42420 South FUR-CH-10000454 Furniture Chairs Hon Deluxe Fabric Upholstered Stacking Chairs,... 731.94 3 0.0 219.5820

2 rows × 21 columns

Låt oss börja med att titta på de deskriptiva statistikerna för datamängden:

In [5]:
data.describe()
Out[5]:
Row ID Postal Code Sales Quantity Discount Profit
count 9994.000000 9994.000000 9994.000000 9994.000000 9994.000000 9994.000000
mean 4997.500000 55190.379428 229.858001 3.789574 0.156203 28.656896
std 2885.163629 32063.693350 623.245101 2.225110 0.206452 234.260108
min 1.000000 1040.000000 0.444000 1.000000 0.000000 -6599.978000
25% 2499.250000 23223.000000 17.280000 2.000000 0.000000 1.728750
50% 4997.500000 56430.500000 54.490000 3.000000 0.200000 8.666500
75% 7495.750000 90008.000000 209.940000 5.000000 0.200000 29.364000
max 9994.000000 99301.000000 22638.480000 14.000000 0.800000 8399.976000

Datamängden har en kolumn "order date". Vi kan använda den här kolumnen för att skapa nya kolumner som "order month", "order year", och "order day", vilket kommer att vara mycket värdefullt för försäljnings- och vinstanalys enligt tidsperioder. Så låt oss lägga till dessa kolumner:

In [6]:
data['Order Date'] = pd.to_datetime(data['Order Date'])
data['Ship Date'] = pd.to_datetime(data['Ship Date']) 

data['Order Month'] = data['Order Date'].dt.month 
data['Order Year'] = data['Order Date'].dt.year
data['Order Day of Week'] = data['Order Date'].dt.dayofweek
Nu kan vi titta på försäljningen per månad:¶
In [7]:
sales_by_month = data.groupby('Order Month')['Sales'].sum().reset_index()
fig = px.line(sales_by_month, 
              x='Order Month', 
              y='Sales', 
              title='Analys av försäljning per månad (Monthly Sales Analysis)')
fig.show()
Nu ska vi titta på försäljningen per kategori:¶
In [22]:
sales_by_category = data.groupby('Category')['Sales'].sum().reset_index()


fig = px.pie(sales_by_category, 
             values='Sales', 
             names='Category', 
             hole=0.5, 
             color_discrete_sequence=px.colors.qualitative.Pastel)

fig.update_traces(textposition='inside', textinfo='percent+label')
fig.update_layout(title_text='Analys av försäljning per kategori / Sales Analysis by Category', title_font=dict(size=12))

fig.show()
Nu ska vi titta på försäljningen per underkategori:¶
In [12]:
sales_by_subcategory = data.groupby('Sub-Category')['Sales'].sum().reset_index()
fig = px.bar(sales_by_subcategory, 
             x='Sub-Category', 
             y='Sales', 
             title='försäljningen per underkategori / Sales Analysis by Sub-Category')
fig.show()
Nu ska vi titta på vinsten per månad:¶
In [16]:
profit_by_month = data.groupby('Order Month')['Profit'].sum().reset_index()
fig = px.line(profit_by_month, 
              x='Order Month', 
              y='Profit', 
              title='vinst per månad / Monthly Profit Analysis')
fig.show()
Nu ska vi titta på vinsten per kategori:¶
In [21]:
profit_by_category = data.groupby('Category')['Profit'].sum().reset_index()

fig = px.pie(profit_by_category, 
             values='Profit', 
             names='Category', 
             hole=0.5, 
             color_discrete_sequence=px.colors.qualitative.Pastel)

fig.update_traces(textposition='inside', textinfo='percent+label')
fig.update_layout(title_text='vinst per kategori /Profit Analysis by Category', title_font=dict(size=12))

fig.show()
Now let’s have a look at the profit by sub-category:¶
In [18]:
profit_by_subcategory = data.groupby('Sub-Category')['Profit'].sum().reset_index()
fig = px.bar(profit_by_subcategory, x='Sub-Category', 
             y='Profit', 
             title='Profit Analysis by Sub-Category')
fig.show()
Nu ska vi titta på försäljnings- och vinstanalys per kundsegment:¶
In [19]:
sales_profit_by_segment = data.groupby('Segment').agg({'Sales': 'sum', 'Profit': 'sum'}).reset_index()

color_palette = colors.qualitative.Pastel

fig = go.Figure()
fig.add_trace(go.Bar(x=sales_profit_by_segment['Segment'], 
                     y=sales_profit_by_segment['Sales'], 
                     name='Sales',
                     marker_color=color_palette[0]))
fig.add_trace(go.Bar(x=sales_profit_by_segment['Segment'], 
                     y=sales_profit_by_segment['Profit'], 
                     name='Profit',
                     marker_color=color_palette[1]))

fig.update_layout(title=' försäljnings- och vinstanalys per kundsegment/ Sales and Profit Analysis by Customer Segment',
                  xaxis_title='Customer Segment', yaxis_title='Amount')

fig.show()

Så butiken har högre vinst från produktsförsäljning till konsumenter, men vinsten från företagsproduktsförsäljning är bättre sett till förhållandet mellan försäljning och vinst.

Låt oss titta på det för att validera våra resultat:¶
In [20]:
sales_profit_by_segment = data.groupby('Segment').agg({'Sales': 'sum', 'Profit': 'sum'}).reset_index()
sales_profit_by_segment['Sales_to_Profit_Ratio'] = sales_profit_by_segment['Sales'] / sales_profit_by_segment['Profit']
print(sales_profit_by_segment[['Segment', 'Sales_to_Profit_Ratio']])
       Segment  Sales_to_Profit_Ratio
0     Consumer               8.659471
1    Corporate               7.677245
2  Home Office               7.125416
In [ ]: